package jvm.stack;

import java.util.Date;

/**
 * @Author: ideaAdmin
 * TODO: 栈的局部变量表也叫本地变量表
 *  局部变量表是一个数字数组 因为基本数据类型都可以用数字表示 char有自己的ascii码 boolean有0/1表示
 *  引用类型使用地址表示 方法返回类型也就是基本数据类型和引用类型
 * Date: 2022/2/16:19:23
 * Description:
 */

public class StackLocalVariables {
    public static void main(String[] args) {
        StackLocalVariables stackLocalVariables = new StackLocalVariables();

    }

    public static void test() {
        StackLocalVariables stackLocalVariables = new StackLocalVariables();
        int i = 10;
        Date date = new Date();
        System.out.println(i);
    }


    /**
     * TODO:测试 局部变量表的插槽 复用
     *         这里的b的作用域在36行开始 到37行结束 它的插槽按顺序是this,a,b 是2,出了作用域后会被回收 然后它的插槽将会被 c 重新使用
     **/
    public void testSlot() {
        int a = 10;
        {
            int b = 2;
            b = a + 2;
        }
        int c = 20;
    }


    public void testSlot02() {
        int a = 10;
        {
            double b = 2d;//如果定义了不使用 并且它的作用域刚刚定义完就结束 局部变量表不会显示它的信息
            b = a + b;
        }
        String s = new String();
        String str = new String();

    }


    public void testSlot03() {
        int a = 10;

        double b = 2d;//如果定义了不使用 局部变量表不会显示它的信息

        String s = new String();

    }
    /**
        * TODO:变量的分类 根据类型：1.基本数据类型 2.引用数据类型
     *                  在类中声明的位置分类：1.成员变量  在使用之前经过初始化赋值
     *                                           静态变量(类变量) 在linking阶段的prepare阶段 进行默认赋值--->init(初始化)阶段进行显示赋值
     *                                           实例变量 随着对象的创建 会在堆空间中分配实例变量空间 并进行默认赋值
     *                                    2.局部变量 :在使用前必须进行显示赋值 否则编译不通过
    **/
}
